﻿SELECT Cname, Semester
FROM Course

WHERE Semester = (SELECT Semester FROM Course WHERE Cname = 'Java');--()中的是内部语句，而程序会由内向外依次执行，因此，会先执行该语句，
																	--该语句的含义是“从Course表中找到Cname为java的Semester”，在Course表中，java的Semester为3，因此，此语句会返回3，
																	--于是，该语句整体变为了WHERE Semester = 3，加上上面的语句，即“在需要 Cname, Semester列的Course表中查找Semester为3的表格
GO

SELECT --想拿什么（最终输出什么）
    Student.Dept,
    CASE--类似switch
        WHEN AVG(SC.Grade) >= 90 THEN '好'--WHEN类似case，THEN类似break
        WHEN AVG(SC.Grade) >= 80 THEN '良好'
        WHEN AVG(SC.Grade) >= 70 THEN '一般'
        ELSE '较差'--default
    END 考试情况
FROM --从哪拿
    Student
    --下面的INNER JOIN可以简写为JOIN
    INNER JOIN SC ON Student.Sno = SC.Sno--连接 学生表 (Student)​ 和 选课成绩表 (SC)
    INNER JOIN Course ON SC.Cno = Course.Cno--连接 选课成绩表 (SC)​ 和 课程表 (Course)
WHERE --初步筛选
    Course.Cname = 'Java'
GROUP BY --按什么分组
    Student.Dept;

--执行顺序：第一步永远是FROM子句，然后将三张表链接，然后到WHERE进行数据的初步筛选，将大表中非java的数据筛选出去，
--形成一张新的大表，然后GROUP BY，按照Dept进行分组，分组结束后将这三个组依次传到SELECT中，而SELECT中已经写了，
--输出Dept与考试情况，至此，程序结束